@@ -382,3 +382,25 @@ class Agent < ActiveRecord::Base |
||
382 | 382 |
handle_asynchronously :async_check |
383 | 383 |
end |
384 | 384 |
end |
385 |
+ |
|
386 |
+class AgentDrop < Liquid::Drop |
|
387 |
+ def initialize(object) |
|
388 |
+ @object = object |
|
389 |
+ end |
|
390 |
+ |
|
391 |
+ def type |
|
392 |
+ @object.short_type |
|
393 |
+ end |
|
394 |
+ |
|
395 |
+ %w[options memory name sources receivers schedule disabled keep_events_for propagate_immediately].each { |attr| |
|
396 |
+ define_method(attr) { |
|
397 |
+ @object.__send__(attr) |
|
398 |
+ } |
|
399 |
+ } |
|
400 |
+ |
|
401 |
+ class ::Agent |
|
402 |
+ def to_liquid |
|
403 |
+ AgentDrop.new(self) |
|
404 |
+ end |
|
405 |
+ end |
|
406 |
+end |
@@ -28,6 +28,8 @@ module Agents |
||
28 | 28 |
"subject": "{{data}}" |
29 | 29 |
} |
30 | 30 |
|
31 |
+ The upstream agent of each received event is accessible via the key `agent`, which has the following attributes: #{''.tap { |s| s << AgentDrop.instance_methods(false).map { |m| "`#{m}`" }.join(', ') }}. |
|
32 |
+ |
|
31 | 33 |
Have a look at the [Wiki](https://github.com/cantino/huginn/wiki/Formatting-Events-using-Liquid) to learn more about liquid templating. |
32 | 34 |
|
33 | 35 |
Events generated by this possible Event Formatting Agent will look like: |
@@ -105,7 +107,7 @@ module Agents |
||
105 | 107 |
def receive(incoming_events) |
106 | 108 |
incoming_events.each do |event| |
107 | 109 |
agent = Agent.find(event.agent_id) |
108 |
- payload = perform_matching(event.payload) |
|
110 |
+ payload = perform_matching({ 'agent' => agent }.update(event.payload)) |
|
109 | 111 |
opts = interpolated(payload) |
110 | 112 |
formatted_event = opts['mode'].to_s == "merge" ? event.payload.dup : {} |
111 | 113 |
formatted_event.merge! opts['instructions'] |